package com.xiaoniu.forum.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xiaoniu.forum.common.utils.PageUtils;
import com.xiaoniu.forum.entity.vo.*;
import com.xiaoniu.forum.form.AppCommentForm;
import com.xiaoniu.forum.form.AppPageForm;
import com.xiaoniu.forum.form.AppTopicForm;

import java.util.List;

public interface AppCommunityService {

    /**
     * 获取社区主页数据列表
     * @return 数据列表
     */
    List<AppCommunityIndexVo> getIndexList();

    /**
     * 根据板块id获取板块详情
     * @param id 板块id
     * @return 数据列表
     */
    AppCommunityInfoVo getCommunityInfoById(String id);

    /**
     * 根据板块id获取话题分类列表
     * @param id 板块id
     * @return 数据列表
     */
    List<AppTopicCategoryVo> getTopicCategoryById(String id);

    /**
     * 根据板块id获取置顶或公告话题列表
     * @param id 板块id
     * @return 数据列表
     */
    List<AppCommunityTopTopicVo> getTopicTopsById(String id);

    /**
     * 根据板块id 和 话题分类id 获取话题数据列表
     * @param communityId 板块id
     * @param topicCategoryId 话题分类id
     * @return 数据列表
     */
    PageUtils getTopicsById(String communityId, String topicCategoryId, AppPageForm pageForm);

    /**
     * 根据话题id获取话题详情
     * @param id 话题id
     * @return 话题详情
     */
    AppCommunityTopicInfoVo getTopicInfoById(String id);

    /**
     * 根据话题id 查询评论
     * @param id 话题id
     * @return 评论列表
     */
    PageUtils getTopicCommentsById(String id,AppPageForm pageForm);



    /**
     * 根据用户ID 签到
     * @param memberId 用户ID
     */
    void checkin(String communityId,String memberId);

    /**
     * 根据用户ID 判断用户今天是否已签到
     * @param memberId 用户id
     * @return true:已签到  false:未签到
     */
    boolean isCheckin(String communityId,String memberId);

    /**
     * 评论
     * @param commentForm 前端表单
     */
    void saveComment(AppCommentForm commentForm);

    void saveTopic(AppTopicForm topicForm);



    /**
     * 根据用户id分页查询话题（根据创建时间倒序）
     */
    PageUtils listTopicByUserId(String userId, Page page);

    /**
     * 根据用户id分页查询评论（根据创建时间倒序）
     */
    PageUtils listCommentByUserId(String userId, Page page);

    /**
     * 获取社区分类 封装成发布联查VO
     * @param id
     * @return
     */
    List<AppPublishOptionVo> getCommunityCategoryForOption();

    /**
     * 根据id查询社区 封装成发布联查VO
     * @param id
     * @return
     */
    List<AppPublishOptionVo> getCommunityForOptionById(String id);

    /**
     * 根据id查询话题分类 封装成发布联查VO
     * @param id
     * @return
     */
    List<AppPublishOptionVo> getTopicCategoryForOptionById(String id);

    /**
     * 根据id查询评论详情
     * @param id
     * @return
     */
    AppCommunityCommentListVo getCommentInfoById(String id);
}
